home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / SWAG / SWAGA_C / COMM.SWG / 0080_JsDoor Chat Door.pas < prev    next >
Pascal/Delphi Source File  |  1995-05-26  |  4KB  |  161 lines

  1. {
  2. This is a Unit for chat doors written in JsDoor, I've written my
  3. own chat door, and I Really missed my old IceChat Tunes, So i've
  4. Come up with a Note-By-Note Playing Routine for Icechat .ICE files..
  5.  
  6. This can be used Multi-Node, because it loads the file into memory..
  7. Instead of reading it from disk..
  8.  
  9.  
  10.  
  11. Usage is easy, it's just
  12.  
  13. GETBANK('FILENAME.ICE');
  14. and then just
  15. PLAYNEXTNOTE;
  16. as long as you want, it will only play one note at a time so you
  17. can use it in a LOOP,  I use it to Display the moving Status Bar
  18. while playing the note and watching for local/remote keys....
  19.  
  20.  
  21. CJ Cliffe  *  Shareware Overload BBS  (613)382-1924 & (613)382-8503
  22.               Voice:  (613)382-4194
  23.  
  24.   Please feel free to use this anywhere you want...
  25.      As long as someone gets good use out of it i'm happy..        }
  26.  
  27.  
  28. Unit PlayIce;   (* 1995 by CJ Cliffe *)
  29. Interface
  30. Uses Jsdoor,Jsmisc,Crt;
  31.  
  32. Procedure Getbank(filename: String);
  33. Procedure PlayNextNote;
  34.  
  35.  
  36. Implementation
  37. Var
  38. Counter : Integer;
  39. Cbank   : Integer;
  40. Soundbnk: Array [1..1500] of String[20];     {Loads To Memory for faster}
  41.                                              {  or Multinode Operation  }
  42.  
  43.  
  44. Function Str2Num(Convertme: String): LongInt;  {Cheap Way Of Converting}
  45. Var
  46.   Counting: Longint;                         {a Numeric String to an }
  47. Begin
  48. {        Integer        }
  49. For Counting := 1 to 1000000 do
  50. begin          { 1 Mil is High, But It }
  51. If Convertme = Strfunc(Counting) then
  52. begin    { Will Stop Long before }
  53.   Str2Num := Counting;  {   It Gets that far,   }
  54. Exit;                                          { Because of this
  55. Exit; }
  56. End;
  57. End;
  58. End;
  59.  
  60.  
  61.  
  62. Procedure Getbank(filename: String);
  63.  
  64. var fil  : Text;
  65.  
  66. Begin
  67. Counter := 0;
  68. { Reset All Old Tones and Counter }
  69. For Cbank := 1 to 1500 do begin
  70. {            If Any               }
  71. Soundbnk[cbank] := '';
  72. end;
  73. cbank := 0;
  74. Assign(fil,filename);                  { Get Filname }
  75. Reset(Fil);
  76. Repeat
  77. inc(cbank);
  78. Readln(fil,soundbnk[cbank]);           { Load File Into Memory }
  79. Until (cbank = 1500) or (EOF(fil));Close(fil);
  80. End;
  81.  
  82.  
  83. Procedure PlayNextNote;
  84.  
  85. var func     : String[4];     {Function WAIT, TONE or Comment}
  86.     tone     : String[5];     {Tone In String Form}
  87.     dura     : String[4];     {String Form Of Duration / 10}
  88.     Temptone : String;        {Temporary Storage String}
  89.  
  90. Label Top;
  91.  
  92. Begin
  93.  
  94. Nosound;                           {Stop Sound }
  95.  
  96. Top:                               {Label for Non-Notes}
  97.  
  98. Inc(Counter);                      {Update Note}
  99.  
  100. If counter = cbank then counter := 1;    {Song Has Ended, Restart!}
  101.  
  102. Temptone := SoundBnk[Counter];     {Make a Temporary Copy of the Note}
  103.  
  104. Func := Temptone;                  {Get All The Values}
  105. Tone := Copy(Temptone,5,5);        {Note Tone}
  106. Dura := Copy(Temptone,10,5);       {Note Duration}
  107.  
  108. Func := Ltrim(Rtrim(Func));        {Strip Spaces For Number Conversion}
  109. Tone := Ltrim(Rtrim(Tone));
  110. Dura := Ltrim(Rtrim(Dura));
  111.  
  112.  
  113. If Copy(Func,1,2) = ';' then Goto Top;    {Comment Found, Skip Note}
  114.  
  115. If Func = 'WAIT' then begin
  116. {WAIT found, Stop Sound and wait} Nosound;
  117. {      Stop Sound For Wait      } Delay(Str2Num(Tone)*10);
  118. Exit;
  119. End;
  120.  
  121. If Func = 'TONE' then begin         {Tone Found, Play Note and Wait for}
  122. Sound(Str2Num(Tone));               {            Dura(tion)            }
  123. Delay(Str2Num(Dura)*10);            {Dura is in  / 10 format, * 10 for }
  124. NoSound;                            {            Normal Play           }
  125. Exit;
  126. End;
  127. End;
  128.  
  129.  
  130. Begin
  131. End.
  132.  
  133.  
  134. { I'm Working on a keyboard for recording .ICE files,  Watch for it in this
  135.  Echo...                                                                    }
  136.  
  137.  
  138.  
  139. { -------------------------------------------------------------------------}
  140.  
  141. { Example Usage Of PLAYICE.PAS }
  142.  
  143.  
  144. {
  145.  
  146. Program IcePlay;
  147. Uses PlayIce,Crt;
  148.  
  149.  
  150. Begin
  151. Clrscr;
  152. Writeln('Playing Song, Any key to Stop');
  153. GetBank('LARRY.ICE');
  154. Repeat
  155. PlayNextNote;
  156. Until Keypressed;
  157. End.
  158.  
  159.  
  160. }
  161.